看過昨天的SSH補充說明之後,相信即使新手也沒那麼害怕「憑證」了吧?
只是實務上,當你的機器愈來愈多,可能就需要「憑證管理」(這個今天沒有喔)
# 1.產生private key
$ openssl genrsa -out gitlab.key 2048
# 2.某某vm或服務(例如:iis、apache)產生certificate signing request (CSR)
$ openssl req -new -key gitlab.key -out gitlab.csr
3.作簽章(用private key對CSR作簽章)
$ openssl x509 -req -days 3650 -in gitlab.csr -signkey gitlab.key -out gitlab.crt
$ openssl dhparam -out dhparam.pem 2048 # 產生stronger DHE parameters
/home/git/data是data store
gitlab預設會到/home/git/data/certs找憑證,而大神的image裡可用3個參數指定
$ mkdir -p /srv/docker/gitlab/gitlab/certs # 這是host的目錄喔,會對到gitlab的/home/git/data
$ cp gitlab.key /srv/docker/gitlab/gitlab/certs/
$ cp gitlab.crt /srv/docker/gitlab/gitlab/certs/
$ cp dhparam.pem /srv/docker/gitlab/gitlab/certs/
$ chmod 400 /srv/docker/gitlab/gitlab/certs/gitlab.key # read
# 下面4個--env,填到docker-compose.yml也是一樣的,
# 儘量寫在yml,否則下過哪些指令很難追,docker-compose要查、要刪container也較方便
$ docker run --name gitlab -d \
--publish 10022:22 --publish 10080:80 --publish 10443:443 \
--env 'GITLAB_SSH_PORT=10022' --env 'GITLAB_PORT=10443' \
--env 'GITLAB_HTTPS=true' --env 'SSL_SELF_SIGNED=true' \
--volume /srv/docker/gitlab/gitlab:/home/git/data \
sameersbn/gitlab:11.2.3
到現在,http會redirected到https,如果你有用load balancer,就不能這樣設定囉
$ cp gitlab.crt /usr/local/share/ca-certificates
$ update-ca-certificates
# 這個gitlab.crt分發給各client端(要用gitlab的開發者們),在他們的電腦把gitlab.crt加入「SSL憑證信認清單)
#如果沒加,用git時會這樣…
git clone https://git.local.host/gitlab-ce.git
fatal: unable to access 'https://git.local.host/gitlab-ce.git': server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
在chrome、firefox也要加gitlab.crt
GitLab信任GitLab CI的self-signed SSL certificates
預設放在/home/git/data/certs/ca.crt,可用SSL_CA_CERTIFICATES_PATH變更
將gitlab-ci container的ca.crt --copy--> gitlab container的/home/git/data/certs/
ca.crt包含你要信任的root ca
(非必要,建議可不做)
讓瀏覽器強制使用 HTTPS,HSTS的設定在瀏覽器、也要瀏覽器支援,若設定太嚴格會造成Local端開發困難
如果你設了反悔,就要在你的瀏覽器清掉該網站的HSTS參數
chrome查相關資訊,找出domain刪除(firefox透過刪掉歷史資料來清HSTS)
chrome://net-internals/#hsts
chrome://net-internals/#dns
NGINX_HSTS_MAXAGE 從現在起,該網站只能透過https
NGINX_HSTS_ENABLED = false # 也能disable HSTS
$ docker run --name gitlab -d \
--env 'GITLAB_HTTPS=true' --env 'SSL_SELF_SIGNED=true' \
--env 'NGINX_HSTS_MAXAGE=2592000' \ # 預設值31536000seconds,設0就disable
--volume /srv/docker/gitlab/gitlab:/home/git/data \
sameersbn/gitlab:11.2.3
(非必要,研究用,建議load balancer使用HAProxy)
像nginx/haproxy/hipache等locad balancers是用http跟後端ap連線,
這樣憑證設定就要設在locad balancer,而非container,否則會有資安風險
使用HAProxy,請參考SeaN McGary大大的文章,有點舊了
HAProxy - route by domain name(2013)
http://seanmcgary.com/posts/haproxy---route-by-domain-name/
Using SSL/HTTPS with HAProxy(2014)
http://seanmcgary.com/posts/using-sslhttps-with-haproxy/
gitlab container維持下面2個環境參數
GITLAB_HTTPS = true # 留著
SSL_SELF_SIGNED = true # 拿掉這個參數
$ docker run --name gitlab -d \
--publish 10022:22 --publish 10080:80 \
--env 'GITLAB_SSH_PORT=10022' --env 'GITLAB_PORT=443' \
--env 'GITLAB_HTTPS=true' \
--volume /srv/docker/gitlab/gitlab:/home/git/data \
sameersbn/gitlab:11.2.3
gitlab 對於 POST request的error respond會用422 HTTP Error,建議加反向代理reverse proxy config
proxy_set_header X-Forwarded-Ssl on; # (nginx format)
有關redmine可參考:https://afunction.gitbooks.io/tools/content/pms/redmine.html
讓redmine container吃的到gitlab的repositories資料,進而用redmine做issue track
使用sameersbn大神的docker-redmine image
https://github.com/sameersbn/docker-redmine
$ docker run --name=postgresql-redmine -d \
--env='DB_NAME=redmine_production' \
--env='DB_USER=redmine' --env='DB_PASS=password' \
--volume=/srv/docker/redmine/postgresql:/var/lib/postgresql \
sameersbn/postgresql:9.6-4
$ docker run --name=redmine -d \
--link=postgresql-redmine:postgresql --publish=10083:80 \
--env='REDMINE_PORT=10083' \
--volumes-from=gitlab \ # 加這行,讓redmine讀得到/home/git/data/repositories
--volume=/srv/docker/redmine/redmine:/home/redmine/data \
sameersbn/redmine:3.4.6
$ docker run --name gitlab -it --rm [options] \
--env "USERMAP_UID=$(id -u git)" --env "USERMAP_GID=$(id -g git)" \
sameersbn/gitlab:11.2.3
變更mapping之後,container裡的/home/git/data必須用新id作re-owned
$ docker run --name gitlab -d [OPTIONS] \
sameersbn/gitlab:11.2.3 app:sanitize
其他全部yml環境變數請參考
https://hub.docker.com/r/sameersbn/gitlab/
Docker secrets
所有--env的環境變數可以放在secrets或config檔中,大神都幫我們做好了,請服用
用docker-compose或Docker Swarm都可以
到
https://github.com/sameersbn/docker-gitlab/tree/master/contrib/docker-swarm
下載
###備份
利用gitlab定義的rake task來,備份&還原,所有git repositories、上傳文件、資料庫
$ docker-compose run --rm gitlab app:rake gitlab:backup:create
# List available backups
$ docker-compose run --rm gitlab app:rake gitlab:backup:restore
# Choose to restore from 1417624827
$ docker-compose run --rm gitlab app:rake gitlab:backup:restore BACKUP=1417624827
# 不會備份 ssh/ 目錄,這個要手動備
3、備份排程 的 參數
GITLAB_BACKUP_SCHEDULE # daily,weekly,monthly
GITLAB_BACKUP_TIME # 預設是0400
GITLAB_BACKUP_EXPIRY # 備份檔預設保留7天
Import bare git Repositories
將repositories --copy--> repositories/
$ docker run --name gitlab -it --rm [OPTIONS] \
sameersbn/gitlab:11.2.3 app:rake gitlab:import:repos
$ crontab -e
0 0 * * FRI docker run --name gitlab -it --rm [OPTIONS] \
sameersbn/gitlab:11.2.3 app:rake gitlab:import:repos
* * * * * 每個星星用TAB或空白鍵格開
分(0-59)、時(0-23)、日(1-31)、月(1-12)、星期幾(日=0、一=1、二=2、三=3、四=4、五=5、六=6)
*代表所有都有效
2-10代表值2~10
A,B,C列舉多個值
例如:
0 12,18,0 * * * // 每天的12點、18點、半夜12點(環點 = =)
image sameersbn/gitlab 大概就這樣啦,
更新真的很快,10/24截稿前,已經到sameersbn/gitlab:11.4.0,(4天前)
最後再po一次網址
更正:
gitlab自從8.0開始,gitlab-ci就併入GitLab CE囉,
還在使用gitlab舊版的朋友
gitlab---->database
gitlab-ci->database
可以考慮migration到新版gitlab
https://github.com/sameersbn/docker-gitlab-ci
https://github.com/sameersbn/docker-gitlab/blob/master/CI_MIGRATION.md